23314
12737
내 질문을 실제로 단어로 표현하는 방법을 잘 모르겠으므로 예를 들어 설명해 보겠습니다.
내 프로그램이 특정 동작에서 이상한 동작을한다고 가정 해 봅시다. 이 이상한 동작의 원인 인 코드를 이미 찾았습니다. 이 시퀀스를 비활성화하면이 동작이 발생하지 않습니다. 불행히도 다른 것이 작동하지 않기 때문에이 코드가 필요합니다.
그래서 다음에 제가 할 일은 그 코드 발췌가 활성화되었을 때 뭔가 달라지는 이유를 알아내는 것입니다.
무슨 일이 일어나고 있는지 더 잘 이해하기 위해 때로는 '나쁜 코드'를 포함한 전체 작업을 실행하고 싶을 때도 있습니다. 그런 다음 결과를 비교할 수 있습니다 (예 : UI에서 발생하는 작업 또는 내 함수가 반환하는 내용).
내 마음에 떠오르는 첫 번째 접근 방식은 코드를 활성화 한 상태에서 프로그램을 실행하고 원하는대로 수행 한 다음 프로그램을 중지하고 코드를 주석 처리 한 다음 다시 컴파일하고 다시 실행하는 것입니다. 음 ... 멍청한 것 같네요. 특히 다른 시간에 다른 동작을보기 위해 해당 코드를 다시 켜고 다시 끄고 켜고 끄는 등의 작업을 수행해야하는 경우.
중단 점을 사용하고 명령문 순서에 영향을 미치거나 값을 수정하여 if 문, for 루프 등을 실행하거나 실행하지 않도록하는 것은 옵션이 아닙니다. 두 가지 예 :
타이밍에 중요한 동작을 디버깅하고 프로그램을 중지하면 타이밍이 크게 변경됩니다. 따라서 설정할 수있는 첫 번째 중단 점은 작업의 끝에 있어야합니다. 1
VS에 초점을 맞출 때 '억제 된'툴팁이나 다른 창이 나타날 것으로 예상합니다. 따라서 중단 점을 전혀 사용할 수 없습니다. 액션의 시작과 끝에서 모두 아닙니다 .1
이 코드를 선택 사항으로 표시하고 작업을 실행하기 전에이 코드 시퀀스를 실행할지 여부를 결정할 수있는 Visual Studio 2012의 기술이 있습니까? 더 높은 수준에서 if (true | false) 같은 것을 생각합니다.
프로그램을 여러 번 다시 실행해야하는 솔루션을 찾고 있지 않습니다. 이 경우에도 #if false로 코드를 주석 처리하는 간단한 방법을 사용할 수 있습니다.
1 물론 특정 위치에서 특정 변수를 조사해야 할 때 중단 점을 설정할 수 있지만 (값을 출력에 기록하지 않은 경우) 한 번에 전체 작업을 실행하기 위해 중단 점을 다시 끕니다. 가다. 
Visual Studio 디버거에서 "문제의 코드"바로 앞에 중단 점을 설정할 수 있습니다. 해당 지점에서 코드가 중지되면 계속하도록 선택하거나 다른 줄을 마우스 오른쪽 단추로 클릭하고 다음 문 설정을 선택할 수 있습니다.
좀 이상한 옵션이지만 감사하게되었습니다.
|
내가 생각할 수있는 유일한 옵션은 디버깅 할 때만 나타나는 UI에 무언가를 추가하여 문제의 작업을 포함 / 제외하는 옵션을 제공하는 것입니다.
여기에있는 동안 UI에서도 응용 프로그램을 "알려진 상태"로 재설정 할 수 있습니다.
|
더 높은 수준에서 if (true | false) 같은 것을 생각합니다.
왜 "높은 수준"입니까? 정확히 이것을 사용하지 않는 이유는 무엇입니까?
때로는 실행되지 않는 코드 조각을 원하며 컴파일 타임이 아닌 런타임에 스위치를 변경해야합니다.
if (조건)
{
// 지분 코드
}
여기서 캐치는 어떤 종류의 조건을 사용할 것인지입니다. 코드의 릴리스 버전에서는 true로 설정하고 디버그 버전에서는 가끔 false로 설정 한 변수 일 수 있습니다. 값은 구성 파일에서 가져 오거나 환경 변수에서 가져 오거나 프로그램의 어떤 종류의 논리로 원하는대로 계산할 수 있습니다.
편집 : 조건에 대한 코드에 부울 변수를 도입하고 기본적으로 true로 초기화하고 원할 때마다 디버거를 사용하여 값을 변경할 수도 있습니다.
|
전 처리기 지시문은 당신이 추구하는 것일 수 있습니다. 컴파일러가 실행할 수있는 코드이며 # 문자로 시작하여 식별 할 수 있습니다 (그리고 스타일에 따라 기본적으로 코드의 들여 쓰기 패턴을 따르지 않고 대신 항상 편집기의 왼쪽 가장자리에 단단히 위치 함) ) :
#define INCLUDE_DODGY_CODE
public void MyMethodWithDodgyBits () {
#if INCLUDE_DODGY_CODE
myDodgyMethod ();
#endif
myOkMethod ();
}
이 경우 #define INCLUDE_DODGY_CODE가 포함 된 경우 myDodgyMethod () 호출이 프로그램으로 컴파일됩니다. 그렇지 않으면 컴파일러가 호출을 건너 뛰고 바이너리에 존재하지 않습니다.
|
요청한대로 디버깅을위한 몇 가지 옵션이 있습니다.
Visual Studio에는 코드를 직접 탐색 할 수있는 여러 옵션이 있습니다. 다음 문 설정 기능을 사용하여 특정 문으로 직접 이동할 수 있습니다. 직접 실행 창, QuickWatch 및 디버깅하는 동안 변수 위로 이동하는 도구 설명을 통해 값을 직접 편집 할 수도 있습니다.
Visual Studio에는 실행 기록을 재생하는 기능도 있습니다. 시작하려면 IntelliTrace를 살펴보십시오. 상호 작용하고 오류 조건을 생성하는 여러 관심 영역이있는 경우 유용 할 수 있습니다.
조건부 블록 내에서 코드 섹션을 래핑하고 조건부 변수를 적절하게 설정할 수도 있습니다. 디버깅 중이거나 구성 파일을 통해 매개 변수를 전달할 수 있습니다. 제외하려는 문이 많은 경우 조건부 검사를 사용하는 것이 수동으로 코드를 단계별로 실행하는 것보다 쉬울 수 있습니다.
|
때로는 VS 버전과 언어에 따라 다르지만 코드를 주석 처리하거나 큰 #ifdef 0으로 감싸기 위해 코드를 즐겁게 편집 할 수 있습니다. 그런 다음 alt + F10을 누르면 컴파일러가 다시 컴파일하고 다시 연결하고 실행을 계속합니다. 한 번도 만져본 적이없는 것처럼.
그러나 그것은 VC ++ (VS v6 IIRC 이후)에서 아름답게 작동하지만 C #에는 문제가있을 수 있습니다. 람다 (주로 linq) 문을 포함하는 함수와 64 비트 코드를 이러한 방식으로 편집하고 계속할 수 없다는 것을 발견했습니다 (VS2010에서). 이것도 사용하지 않았습니다. 그럼에도 불구하고 때로는 실제로 유용하기 때문에 실험 해 볼 가치가 있습니다.
|
프로덕션 환경에 나타나지 않아야하는 디버깅에만 사용되는 선택적 코드가있는 응용 프로그램에서 작업했습니다. 이 선택적 코드 세그먼트는 변경하기 위해 다시 컴파일 할 필요가 없기 때문에 구성 파일을 사용하여 제어하는 ​​것이 가장 쉬웠습니다.
이러한 수정이 최종 결과의 전부는 아니지만 수정 사항을 찾을 때까지 해결하는 데 도움이 될 수 있습니다. 조합하여 테스트해야하는 여러 선택적 섹션이있는 경우이 스타일의 수정은 구성 파일에 여러 키를 요구할 수 있으며, 이는 단점이 될 수 있고 추적하기가 어려울 수 있습니다.
|
귀하의 질문은 정확히 명확하지 않으므로 잘못된 답변이 너무 많은 이유 일 수 있습니다. 아무도 질문에 답할 수없는 것 같으면 단어를 바꾸는 것을 고려할 수 있습니다.
또 다른 유효하지 않은 답변을 제공 할 위험이 있으므로 과거에 문제를 어떻게 처리했는지에 대한 의견을 추가하겠습니다.
가장 쉬운 방법은 옵션 코드를
# 디버그 인 경우
// 여기에 선택적 코드
#endif
이렇게하면 디버그 모드에서 실행할 때 코드가 구현되고 릴리스 모드에서 실행할 때는 그렇지 않습니다. 둘 사이를 전환하려면 하나의 버튼을 클릭해야합니다.
또한 간단한 플래그를 사용하여 비슷한 방식으로 동일한 문제를 해결했습니다.
bool runOptionalCode = false;
그때
if (runOptionalCode)
{
// 여기에 선택적 코드 삽입
}
다시,모드를 전환하려면 한 단어를 변경해야하므로 간단한 작업입니다. 질문에 이것을 언급했지만 명확하지 않은 이유로 할인하십시오. 내가 말했듯이 둘 사이를 전환하는 데는 거의 노력이 필요하지 않습니다.
실행 중에 코드를 변경해야하는 경우 가장 좋은 방법은 UI 항목을 사용하거나 위의 예제에서 언급 한 플래그를 수정하는 키 입력을 사용하는 것입니다. 귀하의 응용 프로그램에 따라 이것이 가치보다 더 많은 노력이 될 수 있습니다. 과거에는 프로젝트의 일부로 이미 구현 된 키 리스너가있을 때 몇 번의 키 입력으로 디버그 (선택 사항) 코드를 실행할지 여부를 결정하는 것이 가장 좋습니다. 키 리스너가없는 애플리케이션에서는 이전 방법 중 하나를 고수하는 편이 낫습니다.
|
너의 답
StackExchange.ifUsing ( "editor", function () {
StackExchange.using ( "externalEditor", function () {
StackExchange.using ( "snippets", function () {
StackExchange.snippets.init ();
});
});
}, "코드 스 니펫");
StackExchange.ready (function () {
var channelOptions = {
태그 : "".split ( ""),
id : "1"
};
initTagRenderer ( "". split ( ""), "".split ( ""), channelOptions);
StackExchange.using ( "externalEditor", function () {
// 스 니펫이 활성화 된 경우 스 니펫 후에 편집기를 실행해야합니다.
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using ( "snippets", function () {
createEditor ();
});
}
else {
createEditor ();
}
});
function createEditor () {
StackExchange.prepareEditor ({
useStacksEditor : false,
heartbeatType : '답변',
autoActivateHeartbeat : false,
convertImagesToLinks : true,
noModals : true,
showLowRepImageUploadWarning : true,
scoreToPostImages : 10,
bindNavPrevention : true,
접미사 : "",
imageUploader : {
brandingHtml : "Powered by \ u003ca href = \"https : //imgur.com/ \ "\ u003e \ u003csvg class = \"svg-icon \ "width = \"50 \ "height = \"18 \ "viewBox = \ "0 0 50 18 \"fill = \ "none \"xmlns = \ "http : //www.w3.org/2000/svg \"\ u003e \ u003cpath d = \ "M46.1709 9.17788C46.1709 8.26454 46.2665 7.94324 47.1084 7.58816C47.4091 7.46349 47.7169 7.36433 48.0099 7.26993C48.9099 6.97997 49.672 6.73443 49.672 5.93063C49.672 5.22043 48.9832 4.61182 48.1414 4.6931182C47.4335 4.61182 46.7256 4.52513.6307884.65959531 43.5251. 43.1481 6.59048V11.9512C43.1481 13.2535 43.6264 13.8962 44.6595 13.8962C45.6924 13.8962 46.1709 13.2535 46.1709 11.9512V9.17788Z \ "/ \ u003e \ u003cpath d = \"M32.492 10.1419C32.492 12.697954 34.104182 14.0484 37.0451 14.0484 41.5985 12.6954 41.5985 10.1419V6.59049C41.5985 5.28821 41.1394 4.66232 40.1061 4.66232C39.0732 4.66232 38.5948 5.28821 38.5948 6.59049V9.60062C38.5948 10.8521 38.2696 11.5455 37.0451 11.5455C35.8209 11.5455 35.4954 10.8 521 35.4954 9.60062V6.59049C35.4954 5.28821 35.0173 4.66232 34.0034 4.66232C32.9703 4.66232 32.492 5.28821 32.492 6.59049V10.1419Z \ "/ \ u003e \ u003cpath fill-rule = \"evenodd \ "clip-rule = \"evenodd \ "d = \ "M25.6622 17.6335C27.8049 17.6335 29.3739 16.9402 30.2537 15.6379C30.8468 14.7755 30.9615 13.5579 30.9615 11.9512V6.59049C30.9615 5.28821 30.4833 4.66231 29.4502 4.66231C28.9913 4.66231 4.66231C28.9913 4.66231 285.733.4555 4.9456023 28.1109 5.50756087 .1369 4.56087 21.0134 6.57349 21.0134 9.27932C21.0134 11.9852 23.003 13.913 25.3754 13.913C26.5612 13.913 27.4607 13.4902 28.1109 12.6616C28.1109 12.7229 28.1161 12.7799 28.121 12.8346C28.1256 12.8854 28.1301 12.9839342 15.1301 25. 15.2321 24.1352 14.9821 23.5661 14.7787C23.176 14.6393 22.8472 14.5218 22.5437 14.5218C21.7977 14.5218 21.2429 15.0123 21.2429 15.6887C21.2429 16.7375 22.9072 17.6335 25.6622 17.628335ZM24.1317 9.27932C24.1317 7.94324 7.0932C24.1317 7.94324 27.2119 7.09766 28.0918 7.94324 28.0918 9.27932C28.0918 10.6321 27.2311 11.5116 26.1024 11.5116C24.9737 11.5116 24.1317 10.6491 24.1317 9.27932Z \ "/ \ u003e \ u003cpath d = \"M16.809.345 11.9512C16.8045 13.8962 17.2637 13.8962 13.2962 17.2637 13.8962 19.8079 13.2535 19.8079 11.9512V8.12928C19.8079 5.82936 18.4879 4.62866 16.4027 4.62866C15.1594 4.62866 14.279 4.98375 13.3609 5.88013C12.653 5.05154 11.6581 4.62866 10.3573 4.62866C9.34336 4.62866 7.78506C9.34336 4.62866 8.510506 5.00066 5.28821 5.00066 6.59049V11.9512C5.00066 13.2535 5.47873 13.8962 6.51203 13.8962C7.54479 13.8962 8.0232 13.2535 8.0232 11.9512V8.90741C8.0232 7.58817 8.44431 6.91179 9.53458 6.91179C10.5104 6.91179 10.893 7.58817 10.893 8.94108V11.4049512C10.893 13.2. C13.4375 13.8962 13.9157 13.2535 13.9157 11.9512V8.90741C13.9157 7.58817 14.3365 6.91179 15.4269 6.91179C16.4027 6.91179 16.8045 7.58817 16.8045 8.94108V11.9512Z \ "/ \ u003e \ u003cpath d = \ "M3.31675 6.59049C3.31675 5.28821 2.83866 4.66232 1.82471 4.66232C0.791758 4.66232 0.313354 5.28821 0.313354 6.59049V11.9512C0.313354 13.2535 0.791758 13.8962 1.82471 13.8962C2.85798 13.8962 3.3167513.2535 3.31675 11.9512V6.59049Z \ "/ \ u003e \ u003cpath d = \"M1.87209 0.400291C0.843612 0.400291 0 1.1159 0 1.98861C0 2.87869 0.822846 3.57676 1.87209 3.57676C2.90056 3.57676 3.7234 2.87869 3.7234 1.98861C3.7234 1.1159 2.90056 0.400291 0.400291Z \ "채우기 = \"# 1BB76E \ "/ \ u003e \ u003c / svg \ u003e \ u003c / a \ u003e",
contentPolicyHtml : "\ u003ca href = \"https : //stackoverflow.com/help/licensing \ "\ u003ecc by-sa \ u003c / a \ u003e \ u003ca href = \"https://stackoverflow.com에 따라 라이선스가 부여 된 사용자 기여 / legal / content-policy \ "\ u003e (콘텐츠 정책) \ u003c / a \ u003e",
allowUrls : true
},
onDemand : true,
폐기 선택기 : ".discard-answer"
, immediatelyShowMarkdownHelp : true, enableSnippets : true
});
}
});
Stack Overflow에 대한 답변에 기여해 주셔서 감사합니다!
질문에 반드시 답해주십시오. 세부 사항을 제공하고 연구를 공유하십시오!
그러나 피하십시오…
도움, 설명을 요청하거나 다른 답변에 응답합니다.
의견에 따라 진술하기 참고 자료 또는 개인적인 경험으로 백업하십시오.
자세한 내용은 훌륭한 답변 작성에 대한 팁을 참조하십시오.
초안 저장
초안이 삭제되었습니다.
가입 또는 로그인
StackExchange.ready (function () {
StackExchange.helpers.onClickDraftSave ( '# login-link');
});
Google을 사용하여 가입
Facebook을 사용하여 가입
이메일 및 비밀번호를 사용하여 가입
제출
게스트로 게시
이름
이메일
필수이지만 표시되지 않음
StackExchange.ready (
함수 () {
StackExchange.openid.initPostLogin ( '. new-post-login', 'https % 3a % 2f % 2fstackoverflow.com % 2fquestions % 2f19425104 % 2fcan-i-mark-some-code-as-optional-while-debugging-in- visual-studio-2012 % 23new-answer ','question_page ');
}
);
게스트로 게시
이름
이메일
필수이지만 표시되지 않음
답변 게시
포기
"답변 게시"를 클릭하면 서비스 약관, 개인 정보 보호 정책 및 쿠키 정책에 동의하게됩니다.
찾고있는 답변이 아닙니까? visual-studio 디버깅 태그가 지정된 다른 질문을 찾아 보거나 직접 질문하십시오.